Load packages
library(tidyverse)
── Attaching core tidyverse packages ───────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.2 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.2 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.0
✔ purrr 1.0.1 ── Conflicts ─────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(lubridate)
library(hms)
Attaching package: ‘hms’
The following object is masked from ‘package:lubridate’:
hms
library(googlesheets4)
hourly_ppl_pivot <- ppl_15mins %>%
rename(date = Date) %>%
pivot_longer(!c("Account Number", "Meter Number", date, "Read Type", Min, Max, Total), names_to = "time", values_to = "kWh")
#rm(hourly_pivot)
hourly_ppl_pivot <- hourly_ppl_pivot %>%
mutate(time = parse_time(time, '%H:%M %p'), month = month(date, label=TRUE), year = year(date), yday = yday(date), wday = wday(date, label=TRUE))
(hourly_ppl_net <- hourly_ppl_pivot %>%
filter(`Read Type` == "kWh Net"))
Import solar production from another notebook (EnphaseHourly.Rmd)
ggplot(hourly_production, aes(datetime, energy_produced_Wh)) +
geom_point()

ggplot(hourly_production, aes(time, energy_produced_Wh)) +
theme(axis.text.x = element_text(angle = 90)) +
geom_point()

ggplot(hourly_production, aes(datetime, energy_produced_Wh)) +
geom_point()

ggplot(hourly_production, aes(time, energy_produced_Wh)) +
theme(axis.text.x = element_text(angle = 90)) +
geom_point()

Net + Produced = Consumedggplot(hourly_production, aes(datetime,
energy_produced_Wh)) +
geom_point()
ggplot(hourly_production, aes(time, energy_produced_Wh)) +
theme(axis.text.x = element_text(angle = 90)) +
geom_point()
# hourly_ppl_net <- hourly_ppl_net %>% mutate(date = as_date(date))
hourly_ppl_net %>% arrange(desc(date))
hourly_production %>% arrange(desc(date))
(hourly_electricity <- hourly_ppl_net %>%
inner_join(hourly_production, by = join_by(date,time)) %>%
mutate(consumed_kWh = kWh + energy_produced_Wh/1000, produced_kWh = energy_produced_Wh/1000) %>%
rename(net_kWh = kWh) %>%
select(datetime, date, time, net_kWh, produced_kWh, consumed_kWh))
NA
ggplot(hourly_electricity, aes(x=time)) +
geom_point(aes(y=consumed_kWh,color="red"))

ggplot(hourly_electricity, aes(x=datetime)) +
geom_point(aes(y=consumed_kWh,color="red"))

LS0tCnRpdGxlOiAiSG91cmx5IEVsZWN0cmljaXR5IENvbnN1bXB0aW9uIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpMb2FkIHBhY2thZ2VzCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoaG1zKQpsaWJyYXJ5KGdvb2dsZXNoZWV0czQpCmxpYnJhcnkocmVhZHhsKQpgYGAKCgpgYGB7cn0KCiNnczRfZGVhdXRoKCkKI3BwbF8xNW1pbnMgPC0gcmVhZF9zaGVldCgiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMXV2NVNCWWtsUS1iQXJDbldQVkcxaE92S3UzZnBnRDFzZ1U4YlRaOHNSNW8vZWRpdD91c3A9c2hhcmluZyIpCiNhZGQgY29sdW1uIHR5cGVzCgoKY29sX2RhdGF0eXBlcyA8LSBjKCdudW1lcmljJywnbnVtZXJpYycsJ2RhdGUnLCd0ZXh0JyxyZXAoJ251bWVyaWMnLDk5KSkKCiM/cmVhZF9leGNlbAoKaG91cmx5MSA8LSByZWFkX2V4Y2VsKCJIb3VybHkgVXNhZ2UgMjIwMzI2IHRvIDIyMDYyNC54bHN4IiwgY29sX3R5cGVzID0gY29sX2RhdGF0eXBlcykKaG91cmx5MiA8LSByZWFkX2V4Y2VsKCJIb3VybHkgVXNhZ2UgMjIwNjI1IHRvIDIzMDYyMy54bHN4IiwgY29sX3R5cGVzID0gY29sX2RhdGF0eXBlcykKaG91cmx5MyA8LSByZWFkX2V4Y2VsKCJIb3VybHkgVXNhZ2UgMjMwNjI0IHRvIDIzMTEyMS54bHN4IiwgY29sX3R5cGVzID0gY29sX2RhdGF0eXBlcykKCmhvdXJseTEKaG91cmx5Mgpob3VybHkzCgpwcGxfMTVtaW5zIDwtIGJpbmRfcm93cyhob3VybHkxLGxpc3QoaG91cmx5Mixob3VybHkzKSkKCnBwbF8xNW1pbnMgJT4lIGFycmFuZ2UoZGVzYyhEYXRlKSwgYFJlYWQgVHlwZWApCgoKYGBgCgpgYGB7cn0KaG91cmx5X3BwbF9waXZvdCA8LSBwcGxfMTVtaW5zICU+JSAKICByZW5hbWUoZGF0ZSA9IERhdGUpICU+JSAKICBwaXZvdF9sb25nZXIoIWMoIkFjY291bnQgTnVtYmVyIiwgIk1ldGVyIE51bWJlciIsIGRhdGUsICJSZWFkIFR5cGUiLCBNaW4sIE1heCwgVG90YWwpLCBuYW1lc190byA9ICJ0aW1lIiwgdmFsdWVzX3RvID0gImtXaCIpIAoKI3JtKGhvdXJseV9waXZvdCkKCmhvdXJseV9wcGxfcGl2b3QgPC0gaG91cmx5X3BwbF9waXZvdCAlPiUgCiAgbXV0YXRlKHRpbWUgPSBwYXJzZV90aW1lKHRpbWUsICclSDolTSAlcCcpLCBtb250aCA9IG1vbnRoKGRhdGUsIGxhYmVsPVRSVUUpLCB5ZWFyID0geWVhcihkYXRlKSwgeWRheSA9IHlkYXkoZGF0ZSksIHdkYXkgPSB3ZGF5KGRhdGUsIGxhYmVsPVRSVUUpKQoKKGhvdXJseV9wcGxfbmV0IDwtIGhvdXJseV9wcGxfcGl2b3QgJT4lIAogIGZpbHRlcihgUmVhZCBUeXBlYCA9PSAia1doIE5ldCIpKQpgYGAKCkltcG9ydCBzb2xhciBwcm9kdWN0aW9uIGZyb20gYW5vdGhlciBub3RlYm9vayAoRW5waGFzZUhvdXJseS5SbWQpCgpgYGB7cn0KZ2dwbG90KGhvdXJseV9wcm9kdWN0aW9uLCBhZXMoZGF0ZXRpbWUsIGVuZXJneV9wcm9kdWNlZF9XaCkpICsKICBnZW9tX3BvaW50KCkKCmdncGxvdChob3VybHlfcHJvZHVjdGlvbiwgYWVzKHRpbWUsIGVuZXJneV9wcm9kdWNlZF9XaCkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkgKwogIGdlb21fcG9pbnQoKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoaG91cmx5X3Byb2R1Y3Rpb24sIGFlcyhkYXRldGltZSwgZW5lcmd5X3Byb2R1Y2VkX1doKSkgKwogIGdlb21fcG9pbnQoKQoKZ2dwbG90KGhvdXJseV9wcm9kdWN0aW9uLCBhZXModGltZSwgZW5lcmd5X3Byb2R1Y2VkX1doKSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKSArCiAgZ2VvbV9wb2ludCgpCmBgYAoKTmV0ICsgUHJvZHVjZWQgPSBDb25zdW1lZGdncGxvdChob3VybHlfcHJvZHVjdGlvbiwgYWVzKGRhdGV0aW1lLCBlbmVyZ3lfcHJvZHVjZWRfV2gpKSArCgogIGdlb21fcG9pbnQoKQoKZ2dwbG90KGhvdXJseV9wcm9kdWN0aW9uLCBhZXModGltZSwgZW5lcmd5X3Byb2R1Y2VkX1doKSkgKwoKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkgKwoKICBnZW9tX3BvaW50KCkKYGBge3J9CgojIGhvdXJseV9wcGxfbmV0IDwtIGhvdXJseV9wcGxfbmV0ICU+JSBtdXRhdGUoZGF0ZSA9IGFzX2RhdGUoZGF0ZSkpCgpob3VybHlfcHBsX25ldCAlPiUgYXJyYW5nZShkZXNjKGRhdGUpKQpob3VybHlfcHJvZHVjdGlvbiAlPiUgYXJyYW5nZShkZXNjKGRhdGUpKQoKCihob3VybHlfZWxlY3RyaWNpdHkgPC0gaG91cmx5X3BwbF9uZXQgJT4lIAogICAgaW5uZXJfam9pbihob3VybHlfcHJvZHVjdGlvbiwgYnkgPSBqb2luX2J5KGRhdGUsdGltZSkpICAlPiUgCiAgICBtdXRhdGUoY29uc3VtZWRfa1doID0ga1doICsgZW5lcmd5X3Byb2R1Y2VkX1doLzEwMDAsIHByb2R1Y2VkX2tXaCA9IGVuZXJneV9wcm9kdWNlZF9XaC8xMDAwKSAgJT4lIAogICAgcmVuYW1lKG5ldF9rV2ggPSBrV2gpICU+JSAKICAgIHNlbGVjdChkYXRldGltZSwgZGF0ZSwgdGltZSwgbmV0X2tXaCwgcHJvZHVjZWRfa1doLCBjb25zdW1lZF9rV2gpKQoKYGBgCgpgYGB7cn0KZ2dwbG90KGhvdXJseV9lbGVjdHJpY2l0eSwgYWVzKHg9dGltZSkpICsKICBnZW9tX3BvaW50KGFlcyh5PWNvbnN1bWVkX2tXaCxjb2xvcj0icmVkIikpIAoKZ2dwbG90KGhvdXJseV9lbGVjdHJpY2l0eSwgYWVzKHg9ZGF0ZXRpbWUpKSArCiAgZ2VvbV9wb2ludChhZXMoeT1jb25zdW1lZF9rV2gsY29sb3I9InJlZCIpKSAKYGBgCgoKCgoK